package model

import (
	"mt-server/basic/config"

	"gorm.io/gorm"
)

type Order struct {
	gorm.Model
	Id             uint64  `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	Amount         float64 `gorm:"column:amount;type:decimal(10, 2);comment:金额;default:NULL;" json:"amount"`                              // 金额
	Address        string  `gorm:"column:address;type:varchar(50);comment:地址;default:NULL;" json:"address"`                               // 地址
	MerchantStatus string  `gorm:"column:merchant_status;type:varchar(20);comment:商家订单处理 0-拒单 1接单;default:NULL;" json:"merchant_status"`  // 商家订单处理 0-拒单 1接单
	RiderStatus    string  `gorm:"column:rider_status;type:varchar(20);comment:骑手配送状态 0-取餐中 1配送中 2已送达;default:NULL;" json:"rider_status"` // 骑手配送状态 0-取餐中 1配送中 2已送达
	UserId         int32   `gorm:"column:user_id;type:int;comment:下单用户id;default:NULL;" json:"user_id"`                                   // 下单用户id
	GoodsId        int32   `gorm:"column:goods_id;type:int;comment:商品id;default:NULL;" json:"goods_id"`
	Quantity       string  `gorm:"column:quantity;type:varchar(20);comment:订单支付状态 0-已支付 1未支付 2 已完成;default:NULL;" json:"quantity"`
	OrderNumber    string  `gorm:"column:order_number;type:varchar(50);comment:订单号;default:NULL;" json:"order_number"`
}

//func (o *Order) TableName() string {
//	return "order"
//}

// 外卖下单
func (o *Order) AddOrder() error {
	return config.DB.Create(o).Error
}

func (o *Order) DelOrder() error {
	return config.DB.Where("user_id=?", o.UserId).Delete(o).Error
}

// 订单处理
func (o *Order) UpOrder() error {
	return config.DB.Where("id=?", o.Id).Updates(o).Error
}

// 用户订单状态查看
func (o *Order) FindOrder() error {
	return config.DB.
		Where("user_id=?", o.UserId).
		Where("rider_status=1"). //待配送订单筛选
		Where("rider_status=2"). //已送达订单筛选
		Find(&o).Error
}

// 接单列表
func (o *Order) ListOrder(page, pageSize int) ([]Order, int64, error) {
	if page <= 0 {
		page = 1
	}
	if pageSize <= 0 || pageSize >= 100 {
		pageSize = 10
	}
	var total int64
	var or []Order
	config.DB.Model(&Order{}).Where("deleted_at IS NULL").Find(&total)
	err := config.DB.
		Where("deleted_at IS NULL").
		Offset((page - 1) * pageSize).
		Limit(pageSize).
		Find(&or).
		Error
	return or, total, err
}
